package day04;

/*
static 关键字
   修饰方法：方法是静态的，属于类的，用类名.方法名调用。
             不加static，方法属于实例的，用实例.方法名调用。
   修饰成员变量：加static，属性是所有实例共享的，属于类的。
                不加static，每个实例独享的。比如姓名，每个实例有自己的名字。
 */
public class Demo05 {
    // 静态的。
    public static void add(int a, int b) {
        System.out.println(a + b);
    }

    // 非静态的
    public void add(double c, double d) {
        System.out.println(c + d);
    }

    public static void main(String[] args) {
        // 类名.方法名
        Demo05.add(10, 20);
        // 同一个类中，类名可以省略
        add(20, 30);

        // 创建一个实例
        Demo05 demo05 = new Demo05();
        // 实例.方法名
        demo05.add(10.0, 20.0);

        Voter v1 = new Voter("张三");
        v1.vote();
        Voter.printCount();

        Voter v2 = new Voter("李四");
        v2.vote();
        Voter.printCount();

        Voter[] voters = new Voter[20];

        // 创建20个选民，投票
        for (int i = 0; i < 20; i++) {
            Voter v = new Voter("选民" + i);
            voters[i] = v;
            v.vote();

            Voter.printCount();
        }

        System.out.println(v2.name); // 非静态的，实例.属性名
        System.out.println(Voter.count); // 静态的属性，类名.属性名

    }
}


/*
选民类：
    姓名：每个选民有自己的名字
    票数：所有选民共享的

    投票方法：如果票数没有达到20票时，可以投票。
 */
class Voter {
    String name;
    static int count;

    // 构造方法
    public Voter(String name) {
        this.name = name;
    }

    // 投票的方法
    public void vote() {
        if (count < 20) {
            System.out.println(name + "投票成功，感谢！");
            count++; // 投票成功，计数+1
        } else {
            System.out.println(name + "投票活动已经结束！");
        }
    }

    // 打印当前投票的数量
    public static void printCount() {
        System.out.println("当前投票数：" + count);
    }
}

